#pragma once
#include<string>
using namespace std;

/*
默认十进制实现(存储0~9)输出+'0'
采用高位在右的方式排列，以方便计算：1234->4321
*/
class 实数{
    private:
    string 分子,分母;//分子分母为整数表示
    int 符号;
    //a+b
    实数 同加(const 实数& 加数);
    //a-b
    实数 同减(const 实数& 加数);
    //b-a/-a+b
    实数 负加(const 实数& 加数);
    public:
    实数();
    class 小数格式错误:exception{};
    class 不是一个十进制数:exception{};
    
    实数(const string& 十进制数字字符串);

    实数& 化简();

    string 分数形式();
    //最后一位进行舍入操作
    string 小数形式(size_t 保留位数=5);
    //不进行舍入
    string 整数形式();

    实数 operator+(const 实数& 加数);
    实数 operator-(const 实数& 减数);
    实数 operator*(const 实数& 乘数);
    实数 operator/(const 实数& 除数);
    bool operator>(const 实数& 数);
    bool operator>=(const 实数& 数);
    bool operator<(const 实数& 数);
    bool operator<=(const 实数& 数);
    bool operator==(const 实数& 数);
    bool operator!=(const 实数& 数);
    //0->相等 1->大于 -1->小于
    int 比较(const 实数& 数);
    //余数参数必须提供
    void 整除(const 实数& 除数,实数& 商,实数& 余数);
    /*
    void 自加(const 实数& 加数);
    void 自减(const 实数& 减数);
    void 自乘(const 实数& 乘数);
    void 自除(const 实数& 除数);
    //仅保留整除结果：如7/3=2
    void 自整除(const 实数& 除数);
    void 自取余(const 实数& 除数);
    */
};